var initFlag = false; // 是否已经初始化

chrome.runtime.onMessage.addListener(onMessage)

function onMessage(request, sender, sendResponse) {
  if (request.msg === "scrollPage") {
    // 滚动到页面底部
    // window.scrollTo(0, document.body.scrollHeight);

    if(!initFlag) {
      getPosition()
      console.log(arrangements)
      console.log(fullHeight, fullWidth)
    }

    // 每次滚动一屏
    processArrangements();
  }
}

// 测量文档多种高度和宽度属性
const widths = [
  document.documentElement.clientWidth, // 视口可见宽度
  document.body.scrollWidth, // body内容总宽度
  document.documentElement.scrollWidth, // 文档完整宽度
  document.body.offsetWidth, // body布局宽度
  document.documentElement.offsetWidth, // html元素的布局宽度
];

const heights = [
  document.documentElement.clientHeight, // 视口可见高度
  document.body.scrollHeight, // body内容总高度
  document.documentElement.scrollHeight, // 文档完整高度
  document.body.offsetHeight, // body布局高度
  document.documentElement.offsetHeight, // html元素的布局高度
]

const max = (nums) => { 
  const filtered = nums.filter(x => x !== undefined && x !== null);

  return filtered.length > 0 ? Math.max(...filtered) : 0;
}

// 获取宽度、高度的最大值
const fullWidth = max(widths),
  fullHeight = max(heights);
      
// 视口课件宽度、高度(每次滚动的步长)
const xDelta = window.innerWidth,
  yDelta = window.innerHeight;

// 文档底部到视口顶部的距离
let yPos = fullHeight - window.innerHeight;
let xPos = 0;

const arrangements = []; // 页面片段的位置信息数组
let numArrangements = 0; // 页面片段的数量

// 滚动条初始位置
const originalX = window.scrollX;
const originalY = window.scrollY;

// 滚动条初始状态
const originalOverflowStyle = document.documentElement.style.overflow;

function getPosition() { 
  //  document.documentElement.style.overflow = "hidden"; // 隐藏滚动条

  // yPos = fullHeight - window.innerHeight; 就是在文档底部
  // 进行循环，每次yPos减少yDelta，向上滚动一屏
  // 当yPos小于等于yDelta时，表示已经滚动到顶部
  while (yPos > -yDelta) { 
    xPos = 0;
    while (xPos < fullWidth) { 
      arrangements.push([xPos, yPos]);
      xPos += xDelta; // 向右滚动一屏
    }
    yPos -= yDelta; // 向上滚动一屏
  }

  numArrangements = arrangements.length; // 页面片段的数量
  initFlag = true; // 初始化完成
}

function processArrangements() { 

  // 如果arrangements数组长度为0，表示已经滚动到顶部
  if (arrangements.length === 0) { 

  }

  let next = arrangements.shift(); // 获取下一个页面片段
  let x = next[0]; // 页面片段的x坐标
  let y = next[1]; // 页面片段的y坐标

  window.scrollTo(x, y); // 滚动到页面片段的坐标
}